package com.hxkj.dao;

import com.alicp.jetcache.anno.CacheInvalidate;
import com.alicp.jetcache.anno.CacheType;
import com.alicp.jetcache.anno.CacheUpdate;
import com.alicp.jetcache.anno.Cached;
import com.hxkj.domain.po.Column;
import com.platform.common.domain.annotation.EnableDataSource;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * 数据操作接口
 *
 * @author: chenwei
 * @version: 1.0
 * @datetime: 2018-06-05 19:32:55
 */
public interface ColumnDao {


    /**
     * @return int
     * @author Mr.zheng
     * @Description saveColumn 新增文章分类
     * @Date 15:41 2018/6/6
     * @Param [column]
     **/
    int saveColumn(Column column);

    /**
     * @return java.util.List<com.hxkj.domain.po.Column>
     * @author Mr.zheng
     * @Description getColumnList 获取文章分类列表
     * @Date 15:55 2018/6/6
     * @Param [column]
     **/
    @EnableDataSource("slave")
    List<Column> getColumnList(Column column);

    /**
     * @return java.util.List<com.hxkj.domain.po.Column>
     * @author Mr.zheng
     * @Description getColumnByName 根据文章分类名称查询文章分类
     * @Date 15:47 2018/6/7
     * @Param [columnName]
     **/
    @EnableDataSource("slave")
    List<Column> getColumnByName(String columnName, Long siteId);

    /**
     * @return int
     * @author Mr.zheng
     * @Description removerColumn 根据Id删除文章分类
     * @Date 16:06 2018/6/7
     * @Param [columnId]
     **/
    @EnableDataSource("master")
    @CacheInvalidate(name = "column:columnId:",key = "args[0]")
    int removeColumnById(Long columnId);

    /**
     * @return java.util.List<com.hxkj.domain.po.Column>
     * @author Mr.zheng
     * @Description getColumnByParentColumnId 根据父节点ID获取子节点分类信息
     * @Date 16:17 2018/6/7
     * @Param [columnId]
     **/
    @EnableDataSource("slave")
    List<Column> getColumnByParentColumnId(Long parentColumnId);

    /**
     * @return com.hxkj.domain.po.Column
     * @author Mr.zheng
     * @Description getColumnById 根据ID查询文章分类
     * @Date 17:02 2018/6/7
     * @Param [columnId]
     **/
    @EnableDataSource("slave")
    @Cached(name = "column:columnId:",key = "args[0]",cacheType = CacheType.REMOTE,expire = 1,timeUnit = TimeUnit.HOURS)
    Column getColumnById(Long columnId);

    /**
     * @return int
     * @author Mr.zheng
     * @Description modifyColumn 修改文章分类
     * @Date 17:10 2018/6/7
     * @Param [column]
     **/
    @EnableDataSource("master")
    int modifyColumn(Column column);

    /**
     * @return int
     * @author Mr.zheng
     * @Description modifySortNum 文章分类排序
     * @Date 14:22 2018/6/8
     * @Param [column]
     **/
    int modifySortNum(Column column);

    /**
     * @return java.util.List<com.hxkj.domain.po.Column>
     * @author Mr.zheng
     * @Description getShowColumnList 获取文章分类状态为显示的列表
     * @Date 15:55 2018/6/6
     * @Param [column]
     **/
    @EnableDataSource("slave")
    List<Column> getShowColumnList(Column clumn);

    /**
     * @return java.util.List<com.hxkj.domain.po.Column>
     * @author Mr.zheng
     * @Description getOptionColumnList 解析文章分类
     * @Date 13:15 2018/6/30
     * @Param [column]
     **/
    @EnableDataSource("slave")
    List<Column> getOptionColumnList(Column column);

    @EnableDataSource("slave")
    Column getColumnByName_(Column column);

    /**
     * 根据站点及模板id获取绑定的分类列表数据
     *
     * @param
     * @return
     * @throws Exception
     */
    @EnableDataSource("slave")
    List<Column> getColumnListByTempletIds(Column column);

    /**
     * @return java.util.List<com.hxkj.domain.po.Column>
     * @author Mr.zheng
     * @Description getColumnByTempletId 根据模板ID和站点ID去获取分类模拟数据
     * @Date 19:24 2018/8/16
     * @Param [column]
     **/
    @EnableDataSource("slave")
    List<Column> getColumnByTempletId(Column column);

    /**
     * @author Mr.zheng
     * @Description modifyTemptId 修改模板ID
     * @Date 20:43 2018/9/13
     **/
    int modifyTemptId(Column column);

    /**
     * @author Mr.zheng
     * @Description removeContentByColumnId 根据分类ID删除该分类下所有文章的扩展内容
     * @Date 11:57 2018/9/14
     **/
    int removeContentByColumnId(Long columnId);

    /**
     * @author Mr.zheng
     * @Description getColumnByAlias 根据分类别名查询分类
     * @Date 12:48 2018/9/29
     **/
    @EnableDataSource("slave")
    List<Column> getColumnByAlias(String alias, Long siteId);
}
